<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../node_modules/vue/dist/vue.global.js"></script>
</head>

<body>
    <div id="app">
        <p>
            <input type="text" v-model="firstname" placeholder="姓">
        </p>
        <p>
            <input type="text" v-model="lastname" placeholder="名">
        </p>
        <p>
            <input type="text" name="" id="" v-model="fullname" placeholder="全名">
        </p>

    </div>
</body>

</html>
<script>
    // 计算属性的使用? 怎么使用?
    // 思路步骤: 该属性依赖于其他属性的,咱们就可以把该属性设置为计算属性. 当依赖属性发生变化,计算属性会重新计算

    // 注意: 计算属性中的值,和data 中的值,只能有一个, 不能同时存在,否则警告.
    // 计算中的this 指向当前的组件实例对象 和methods一样


    // 计算属性的另一种写法: 常规写法
    //  get 方法: 当依赖的项发生改变,触发get 方法,重新获取最新的计算属性值
    //  set 方法: 当修改计算属性的时候, 触发set 方法, 执行对应的逻辑
    // computed:{
    //    计算属性名:{
    //        get(){
    //          return 计算属性的值
    //        },
    //        set(val){
    //           val 为给计算属性赋值的新值
    //        }
    //    }   
    // }

    // 注意: 计算属性 初始化就执行
    const app = Vue.createApp({
        data() {
            return {
                firstname: '',
                lastname: '',
            }
        },
        computed: {
            // 计算属性的简写: 相当于只有get 方法
            // fullname() {
            //     return this.firstname + this.lastname
            // }

            // 计算属性的常规写法:
            fullname: {
                get() {
                    console.log('get');
                    return this.firstname + this.lastname
                },
                set(val) {
                    console.log('set', val);
                    this.firstname = val.substr(0, 1);
                    this.lastname = val.substr(1)
                }
            }
        },
        methods: {
            // getFullnameFn() {
            //     this.fullname = this.firstname + this.lastname
            //     return this.fullname
            // }
        }
    }).mount('#app')

</script>